Титановый отвар
Разница между map и fmap в Haskell
10/11/2019

Задался вопросом: зачем в хаскеле существует map, если есть fmap? map работает со списками, fmap -- с функторами. Но ведь список сам по себе есть функтор! Какова же фундаментальная разница между этими двумя функциями?
Оказывается, почти никакой, просто так исторически сложилось.

В версии Haskell 1.3 fmap была переименована в map (логично), и её тип был обобщён для работы с функторами в целом, а не только со списками. Но в версии 1.4 разделение вернули. Посчитали, что новичкам, изучающим язык, будет сложнее понять сообщения об ошибках, в которых будут упоминаться функторы, а не списки. Так что map работает исключительно со списками, а fmap, более генерализованно, с любыми функторами.

Так себе решение, если честно. С функторами в процессе изучения хаскелля так или иначе придётся столкнуться, причём довольно рано. Это основополагающая штука, в конце концов! Но зато теперь в языке есть map и fmap, а на StackOverflow есть соответствующий вопрос.

А разгадка проста...